10月20号学习C语言:关于指针(地址)

it2023-02-27  78

定义指针变量 指针变量前面加*。 请注意不要把整数直接赋值给指针变量,内存上可以存储,但逻辑上会出现解析错误。指针,地址

e.g.1

#include<stdio.h> int main() { int* a; int b=100; a=&b;//&是取地址符号,此时a指向 printf("%d\n",b); *a=1000;//*a表示指向的内容 printf("%d\n",b); printf("%d\n",a);//所指向的首地址 } 100 1000 6487572

e.g.2

printf("%d\n",*a); printf("%d\n",*(a+1));//从指向首地址,变为指向第二个地址 printf("%d\n",a,a+1);//指针变量,改变字节,int:四个字节。+4

P.S. : *a和a都指向首地址,前者给出首地址元素的值,后者给出内存。 如果a是指针变量,b是一个数,则传值需要用:a=&b; 而如果,b也是指针变量,如b[10]:a=b;

#include<stdio.h> int main() { char a; printf("%d",sizeof(a)); return 0; } 1 #include<stdio.h> int main() { char* a; printf("%d",sizeof(a)); return 0; } 8 --------------------------------

3.交换两个指针的值

#include<stdio.h> int main() { int* a; int* b; int x; int c=10; int d=20; a= &c; b= &d; x=*a; *a=*b; *b=x; printf("%d,",*a); printf("%d",*b); return 0; } 20,10 &传值也传址 #include<stdio.h> void fu(int* b) { *b=10000; } int main() { int a=10; fu(&a); printf("%d",a); return 0; } 10000

但如果不加&,则传值不改变原变量的值。 如a=5; b=a; b=10; 此时的a值还是5.

#include<stdio.h> void fu(int b) { b=10000; } int main() { int a=10; fu(a);//此处是将a的值赋给b printf("%d",a); return 0; } 10 用指针定义数组 #include<stdio.h> int main() { int b[10]; int *p=b;//用指针定义数组,p指向b的首地址 for(int i=0;i<10;i++) { *(p+i)=i;//由于前面已经指向b,故p的每一个位置也都指向b的对应位置。即借助指针将i赋值给b } for(int j=0;j<10;j++) { printf("%d\n",b[j]); } return 0; } 0 1 2 3 4 5 6 7 8 9
最新回复(0)