日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言08,C语言08 -- 指针

發布時間:2025/3/19 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言08,C语言08 -- 指针 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

//

// main.m

// C8—指針

//

// Created by dllo on 15/7/9.

// Copyright (c) 2015年 Gaozi. All rights reserved.

//

import

import “MY FOUNDTION.h”

int main(int argc, const char * argv[]) {

模擬一次投票過程,對4個人投票,投票后對這四個人,根據票數從小到大進行排序.

PERSON per1 = {“one”,0};

PERSON per2 = {“two”,0};

PERSON per3 = {“three”,0};

PERSON per4 = {“four”,0};

PERSON people[4] ={per1,per2,per3,per4};

vote(people, 3);

for (int i = 0; i < 4; i++) {

printf(“%d\n”,people[i].votenum);

}

// 指針

//訪問方式:1.直接訪問:直接通過變量名進行訪問稱為直接訪問.

//2.匿名訪問:通過門牌號,地址,一樣可以訪問到對應的數據,例如指針.(OC中絕大部分都是通過匿名訪問).

// 棧區 – 放變量 -> int a = 0;長度最長.

// 堆區 – oc一般放在這;

// 全局靜態區 -> 全局變量(state)

// 常量區

// 代碼區 最小

int a = 10;

// 取地符 —- & 打印用%p

printf("%p\n",&a);

//定義一個整型指針變量

int *p = NULL; // 空指針.

// int * 是類型,P是變量名,NULL是初始值.int* 在32位占4個字節,64位占8個字節.

printf(“%ld\n”,sizeof(int*));

p = &a;

printf(“%p\n”,p);//和a的地址一樣

// 取值符. -> * 打印用%d

printf(“%d\n”,*p);

printf(“%d\n”,*&a);

*p += 20;

printf(“%d\n”,*p);

int b =10, c = 20;

printf(“%d\n”,b+++c);// 結果是30

printf(“%d\n”,b);//結果 11

printf(“%d\n”,c);//結果 20

int a = 10,b = 20;

// 通過指針的方式讓兩個變量值發生交換

int *pa = &a;

int *pb = NULL;

pa = &a;

pb = &b;

/*

只交換了指針指向,沒有將值交換!

int *temp = pa;

pa = pb;

pb = temp;

printf(“%d\n”,a); 打印出來還是10,沒有交換.

*/

int temp = *pa;

*pa = *pb;

*pb = temp;

printf(“%d %d\n”,*pa,*pb);

// 通過指針來進行操作,交換的不是指針,而是地址上的值.

int d = 0;

int *p = &d;

int * *p1 = &p;

int a = 10, b = 20,c = 30;

int arr[3] = {a,b,c};

for (int i = 0; i < 3; i++) {

// printf(“%d \n”,arr[i]);

}

printf(“%p\n”,&arr[0]);

printf(“%p\n”,&arr);

printf(“%p\n”,arr);

printf(“%p\n”,&a);

printf(“a = %d,arr[0] = %d\n”,a,arr[0]+20);

int a = 30,b = 40,c = 50,d = 60,e = 70;

int *arr[5] = {&a,&b,&c,&d,&e};

int arr[5] = {1,2,3,4,5};

int *p = arr;

printf(“%p\n”,arr);

printf(“%p\n”,p);

printf(“%d\n”,*arr);

printf(“%d\n”,*p);

// 這兩個打印的地址都是第一個1的地址,打印的取值都是1,那么,怎么打印出數組后面的元素呢?

// 指針的算術運算.

int a = 30,b = 40,c = 50,d = 60,e = 70;

int *pa = &c;

printf(“%p\n”,&a);

printf(“%p\n”,&b);

printf(“%p\n”,&c);

printf(“%p\n”,&d);

printf(“%p\n”,&e);

printf(“%p\n”,(pa+1));// +1 即向上跳了四個字節.

printf(“%p\n”,(pa));

int arr[4] = {2,3,1,5};

printf(“%p\n”,&arr[0]);

printf(“%p\n”,&arr[1]);

printf(“%p\n”,&arr[2]);

printf(“%d\n”,*(arr+3));

printf(“%d\n”,arr[3]);

int *p = arr;

printf(“%p\n”,p);

printf(“%d\n”,*(p+3));

printf(“%d\n”,p[3]);

語法糖:

作用就是提高代碼的可讀性,并且簡化代碼.

// 冒泡函數

int *p = arr;

for (int i = 0; i < 4 - 1; i++) {

for (int j = 0; j < 4 - i -1; j++) {

if ((p+j)>(p+j+1)) {

int temp = *(p+j);

(p+j) =(p+j+1);

*(p+j+1) = temp;

}

}

}for (int i = 0; i < 4; i++) {

printf(“%d “,*(p+i));

}

printf(“\n”);

// 對指針的算術運算相當于控制指針跳轉的方向,++向高位移動,–向低位移動,而類型控制每次跳動幾個字節, int -> 4個字節.

int a = 10;

text(&a);

printf(“主函數里a的地址:%p\n”,&a);

printf(“%d\n”,a);

// 通過傳地址才能在函數中改變主函數中a的值.

int a = 30,b = 40;

exchange(&a, &b);

printf(“a = %d,b = %d\n”,a,b);

char str[20] = “lfas6”;

char str1[20] = “iphone”;

char *p = str;

printf(“%s\n”,p);

printf(“%c\n”,p[1]);

// for (int i = 0; i < strlen(p); i++) {

// printf(“%c”,p[i]);

// }printf(“\n”);

//通過指針計算字符串長度,strlen.

int len = 0;

for (int i = 0; i >= 0; i++) {

if (p[i] != ‘\0’) {

len++;

}else{

break;

}

}printf(“%d\n”,len);

for (int i = 0; p[i] != ‘\0’;i++) {

len++;

}printf(“%d\n”,len);

// 為什么不能夠對arr[]不能直接取等?而結構體可以.

// 因為數組的名是第一個元素的首地址,這個地址是一個常量的地址,

int arr[2] = {1,2};

int a = 0;

int *p = arr;

p = &a;

// 指針重指向

,原來取的arr中第一個元素的地址,現在取a的地址.

char str1[20] = “lalala”;

char str2[20] = “haha”;

int *p1 = str1;

int *p2 = str2;

strcpy(str1, str2);

//printf(“%s\n”,str1);// %s 遇’\0’結束.不打印.

for (int i = 0; i < 20; i++) {

printf(“%c”,str1[i]);

}printf(“\n”);

// C語言使用前一定要重新賦值!

int t = test1();

int b = test2();

printf(“t = %d,b = %d\n”,t,b);

// 若是在test1()和test2()中間加一個printf,b的值就是0,

//因為不是連續調用了.

return 0;

}

//

// MY FOUNDTION.h

// C8—指針

//

// Created by dllo on 15/7/9.

// Copyright (c) 2015年 Gaozi. All rights reserved.

//

import

import “MY FOUNDTION.h”

void vote(PERSON people[], int personnum){

for (int i = 0; i < personnum; i++) {

char c = ‘0’;

scanf(“%c”,&c);

switch (c) {

case ‘A’:

people[0].votenum++;

// 清空格//

break;

case ‘B’:

people[1].votenum++;

break;

case ‘C’:

people[2].votenum++;

break;

case ‘D’:

people[3].votenum++;

break;

default:

personnum++;

printf(“輸入無效請重輸!\n”);

break;

}

}

}

void text(int *a){

// *a += 20;

printf(“.m中a的地址:%p\n”,a);

*a += 20;

}

void exchange(int *a ,int *b){

int temp = *a;

*a = *b;

*b = temp;

// 不交換地址,只交換內容.

}

int test1(){

int g = 10;

return g;

}

int test2(){ int f; return f; } //并沒有對g賦值.但是連續調用,它使用的是同一塊內存.可能就是沿用了其他的數據,所以用之前需要重新賦值.

總結

以上是生活随笔為你收集整理的c语言08,C语言08 -- 指针的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。