C 語言練習程式(3) -- 指標相關程式集錦(2)


Posted by nathan2009729 on 2022-07-09

程式1:

int main ()
{
    int a[5][5];
    int (*p)[4];
    p = a;
    printf ("a_ptr=%#p,p_ptr=%#p\n", &a[4][2], &p[4][2]);
    printf ("%p,%d\n", &p[4][2] - &a[4][2], &p[4][2] - &a[4][2]);
    return 0;
}

&p[4][2] - &a[4][2]的值为-4

程式2:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void GetMemory(char *p, int num) { p = (char *)malloc(num * sizeof(char)); }

char *GetMemory2(char *p, int num) {
  p = (char *)malloc(num * sizeof(char));

  return p;
}

void GetMemory3(char **p, int num) {
  *p = (char *)malloc(num * sizeof(char));

}

int main() {
  char *str1 = NULL;

  char *str2 = NULL;

  // GetMemory▒istr▒C10▒j;
  str1 = GetMemory2(str1, 10);

  GetMemory3(&str2, 10);

  strcpy(str1, "hello");

  strcpy(str2, "world");

  printf("%s %s\n", str1, str2);

  free(str1);
  free(str2);

  return 0;
}

函數指標

程式3:

#include <stdio.h>
#include <string.h>
char* fun(char* p1, char* p2) {
  int i = 0;
  i = strcmp(p1, p2);
  if (0 == i) {
    return p1;
  } else {
    return p2;
  }
}

int main() {
  char* (*pf)(char* p1, char* p2);
  pf = &fun;
  (*pf)("aa", "bb");
  return 0;
}

void Function()
{
printf("Call Function!\n");
}
int main()
{
void (*p)();
*(int*)&p=(int)Function;
(*p) ();
return 0;
}

以上程式是不會過關的,需要思考的是原本宣告成指向return void的函數的指標,如何轉型成指向return int的函數的指標。


#multi-dimension array #function pointer







Related Posts

React 又肥又慢,為什麼我還要用它?

React 又肥又慢,為什麼我還要用它?

React. js頂尖開發:建立使用者介面的JavaScript 函式庫(第二版)1-2

React. js頂尖開發:建立使用者介面的JavaScript 函式庫(第二版)1-2

資料夾結構

資料夾結構


Comments