介绍指针的定义与使用,指针访问变量,数组,字符串,涉及多级指针,指针与const结合
代码如下(示例):
//基本定义与使用
double a=1.0, b=2.2;
double* pa = &a, * pb = &b;
double** ppa= &pa, ** ppb = &pb;
**ppa = 9.9;
printf("a=%.1f\n", **ppa);
*ppb =&a ; //或者 pb=&a //通过ppb指向pb的指向a
printf("a=%.1f\n", **ppb);
double *** s=&ppa;
**s = &b; //通过s修改pa的指向 指向b
printf("b=%.1f\n", ***s);
指针访问一维数组,先定义指向一维数组的指针
指针p指向数组arr的首地址,p+i就是数组元素arr[i]的地址,通过对这些地址施加 * 或[ ]运算则可以访问数组中元素中的数据
代码如下(示例):
int arr[] = { 1,2,3,4,5 };
int* p = arr; //int *p=&arr[0];
const char* pstr = "hello";
代码如下(示例):
//实现一个函数Getsum() 返回值为void 实现1+2+3+4+....
//并将求和结果在main中打印出来
void GetSum(int n, int* sum)
{
//法一 *sum=(1 + n)* n / 2; //求和公式
//法二
*sum=0;
for(int i = 1; i <= n; i++)
{
*sum+= i;
}
/* 法三
int s=0;
for(int i=1;i<=n;i++)
{
s+=i;
}
*sum=s;
*/
}
代码如下(示例):
#inlcude<stdio.h>
void Swap1(int* a, int* b) //形参 栈内开辟空间
{
int temp = *a;
*a = *b;
*b = temp;
}
void Swap2(int a ,int b)
{
int temp;
temp=a;
a=b;
b=temp;
}
int main()
{
int a=2,b=3;
Swap2(a , b);
printf("%d %d ",a,b); // 2 3
Swap1(&a, &b);
printf("%d %d ",a,b); // 3 2
}
#include
int main()
{
//基本定义与使用
double a=1.0, b=2.2;
double* pa = &a, * pb = &b;
double** ppa= &pa, ** ppb = &pb;
**ppa = 9.9;
printf("a=%.1f\n", **ppa);
*ppb =&a ; //或者 pb=&a //通过ppb指向pb的指向a
printf("a=%.1f\n", **ppb);
double *** s=&ppa;
**s = &b; //通过s修改pa的指向 指向b
printf("b=%.1f\n", ***s);
}
代码如下(示例):
*/
#include
#include
void Show(int* p, int n)
{
//法一
printf("指针指向首元素不动,利用偏移量输出:");
for (int i = 0; i < n; i++)
{
printf("%d ", *(p + i));
}
//法二
printf("\n使用指针加一,利用指针指向每一个元素输出:");
for (int i = 0; i < n; i++)
{
/*printf("%d ", *p);
p++;*/
printf("%d ",*p++);
}
printf("\n\n");
}
int main() //栈区 函数局部变量
{
int ar[] = { 1,2,3,4,5 };
//int* p = arr; //int *p=&arr[0];
int n = sizeof(ar) / sizeof(ar[0]);
Show(ar, n);
}
const int* p=&val;
const 限定*p; 不能通过p修改所指之物的值
int* const p=&val;
const 限定p; 不能修改p的指向,可以通过p修改所指之物的值
代码如下(示例):
#include
#include
size_t mystrlen(const char* p)
{
size_t count = 0;
while (*p!='\0')
{
count++;
p++;
}
return count;
}
int main() //栈区 函数局部变量
{
const char* pstr = "hello";
size_t i = mystrlen(pstr);
printf("长度:lenght_*pstr=%d\n\n",i );
}